﻿#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
//int main()
//{
//	printf("%s\n", __FILE__);
//	printf("%d\n", __LINE__);
//	printf("%s\n", __DATE__);
//	printf("%s\n", __TIME__);
//	//printf("%d\n", __STDC__);
//	return 0;
//}

//#define reg register
//
////for循环的判断部分什么都不写的时候，意味着判断恒为真，就是死循环
//#define do_forever for(; ;) 
//
//// \是续行符
//
//#define DEBUG_PRINT printf("file:%s\tline:%d\t \
//				date:%s\t time:%s\n" , \
//				__FILE__, __LINE__ , \
//				__DATE__, __TIME__ )   
//
//
//int main()
//{
//	reg int num = 10;//建议将num的值放在寄存器中
//	//do_forever;//死循环
//	DEBUG_PRINT;
//
//
//	int num1 = 10;
//	return 0;
//}

//这是一个错误的示范
//#define MAX 100; //这样写是不好的
//
//int main()
//{
//	int a = 0;
//	int b = 0;
//	if (a < 0)
//		a = MAX;
//	else
//		b = -MAX;
//	return 0;
//}



//#define SQUARE(N)  N*N
//
//int main()
//{
//	int a = 5;
//	int r = SQUARE((a + 1));
//	printf("%d\n", r);
//
//	return 0;
//}

//#define SQUARE(N)  (N)*(N)
//
//int main()
//{
//	int a = 5;
//	int r = SQUARE(a + 1);
//	printf("%d\n", r);
//
//	return 0;
//}

//#define DOUBLE(X) ((X)+(X))//80
////#define DOUBLE(X) (X)+(X)//44
//
//int main()
//{
//	int r = 10 * DOUBLE(4);
//
//	printf("%d\n", r);
//
//	return 0;
//}

//#define MAX(a,b) ((a)>(b)?(a):(b))
//int main()
//{
//	int a = 20;
//	int b = 22;
//	int r = MAX(a++, b++);
//	//((a++)>(b++)?(a++):(b++))
//	// 20     22          23   先使用再++
//	printf("r=%d\n", r);
//	printf("b=%d\n", b);//24
//
//	return 0;
//}

////宏的形式
//#define MAX(x, y)  ((x)>(y)?(x):(y))
//
////函数的形式
//int Max(int x,int y)
//{
//	return x > y ? x : y;
//}
//
//int main()
//{
//	int a = 10;
//	int b = 12;
//	int m1 = MAX(a++, b++);
//	printf("m1 = %d\n", m1);//13 but b 是14了
//	printf("b = %d\n",b);
//	printf("a = %d\n",a);
//
//	//int m2 = Max(a++, b++);
//	//printf("m2 = %d\na = %d\nb = %d\n", m2,a,b);//12  先使用再++
//
//	return 0;
//}



//宏的形式
//#define MAX(x, y)  ((x)>(y)?(x):(y))
//#define B 12
//
//int main()
//{
//	int a = 10;
//	
//	int m1 = MAX(a, B);
//	printf("m1 = %d\n", m1);
//	printf("B = %d\n", B);
//
//	return 0;
//}

////宏的形式
//#define MAX(x, y)  ((x)>(y)?(x):(y))
//
////函数的形式
//int Max(int x,int y)
//{
//	return x > y ? x : y;
//}
//
//int main()
//{
//	int a = 10;
//	int b = 12;
//	//宏
//	int m1 = MAX(a, b);
//	//int m1 = ((a)>(b)?(a):(b));
//	printf("m1 = %d\n", m1);
//
//	//函数
//	int m2 = Max(a, b);
//	printf("m2 = %d\n", m2);
//
//	return 0;
//}

//#include<stdlib.h>
//#define Malloc(n,type) (type*\
//	)malloc(n*sizeof(type))  //\换行符
//
//int main()
//{
//	int* p = (int*)malloc(10 * sizeof(int));
//	double* p2 = Malloc(10, double);
//}


//int main()
//{
//	printf("hello world\n");
//	printf("hello"" world\n");//"" ""
//
//	return 0;
//}

//#参数  可以让该参数变为
//#define Print(n,format) printf("the value of "#n" is "format"\n", n);
//int main()
//{
//	int a = 10;
//	//printf("the value of a is %d\n", a);
//	Print(a, "%d");
//	float f = 3.14f;
//	Print(f, "%.3f");
//	//printf("the value of f is %f\n", f);
//}

//#define CAT(X, Y) X##Y
//
//int main()
//{
//	int Class117 = 100;
//	printf("%d\n", CAT(Class, 117));
//
//	return 0;
//}



////函数的模具
//#define GENERIC_MAX(type)\
//type type##_max(type x,type y){\
//return x>y?x:y;\
//}
//
//GENERIC_MAX(int);//int_max
//
//GENERIC_MAX(float);
//
//GENERIC_MAX(double);
//
//int main()
//{
//	int r = int_max(10,20);
//	float m = float_max(10.14f,20.1545f);
//	printf("%d\n", r);
//	printf("%f\n", m);
//
//	return 0;
//}




//#define MAX 100
//
//int main()
//{
//	int m = MAX;
//	printf("%d\n", m);
//	printf("%d\n", MAX);
//#undef MAX  //取消对M的重定义
//
//#define MAX 101
//	int n = MAX;
//	printf("%d\n", MAX);
//
//	return 0;
//}

#include <stdio.h>
#define __DEBUG__  //有这个就打印，注释掉就不打印

int main()
{
    int i = 0;
    int arr[10] = { 0 };
    for (i = 0; i < 10; i++)
    {
        arr[i] = i;
//#ifdef __DEBUG__
//        printf("%d\n", arr[i]);//为了观察数组是否赋值成功。                
//#endif 
        //等同于下面这个
#if defined(__DEBUG__)
        printf("%d ", arr[i]);//为了观察数组是否赋值成功。                
#endif


        //---------
#ifndef __DEBUG__
        printf("%d ", arr[i] + 1);
#endif
        //等同于下面这个
#if !defined( __DEBUG__ )
        printf("%d ", arr[i] + 1);
#endif
    }
    return 0;
}


////条件判断，等于0不打印 必须得有值
//#define MAX 1
//
//int main()
//{
//#if MAX
//	printf("hehe\n");
//#endif
//	printf("haha\n");
//	return 0;
//}

//err
//#define __DEBUG__ 
//int main()
//{
//#if __DEBUG__
//	printf("hehe\n");
//#endif
//	printf("haha\n");
//	return 0;
//}


//多个分⽀的条件编译
//#define M 56
//int main()
//{
//#if M<50
//	printf("hehe\n");
//#elif M>=50&&M<=80
//	printf("haha\n");
//#else
//	printf("Hello world");
//#endif
//	return 0;
//}

//#if defined(symbol)只是看symbol有没有定义，没有定义值一样可以
//#if defined(symbol) 等同于 #ifdef symbol
//#if !defined(symbol) 等同于 #ifndef symbol
//#define M 100
//int main()
//{
//#if defined(M)
//	printf("hehe\n");
//#endif
//
//#ifdef M
//	printf("haha\n");
//#endif
//	return 0;
//}


//如果注释掉就没有定义，就可以打印
//#define M 100
//int main()
//{
//#if !defined(M)
//	printf("hahaha\n");
//#endif
//
//#ifndef M
//	printf("hello\n");
//#endif
//	return 0;
//}